module PleitosHelper

  def pleito_editavel?
    @pleito.inscrevendo? || permitted_to?(:create, :dados_pleito)
  end

  def caracterizacao_path
    [@pleito.caracterizado? ? :edit : :new, @pleito, :caracterizacao]
  end

  def methods_to_xml(xml, target, methods = [])
    methods.each do |m|
      result = target.send(m)
      if result.is_a? Numeric
        result = result.integer? ? number_with_delimiter(result) : number_with_precision(result)
      elsif result.is_a?(ActiveSupport::TimeWithZone) || result.is_a?(Date)
        result = l(result)
      end
      xml.tag! m.to_s.dasherize, result
    end
  end

  def dados_cabecalho_rodape(xml)
    xml.codigo @pleito.codigo
    p = @pleito.empreendimento
    if p.representante_nome != '' && p.representante_cpf != ''
      xml.representante do
        xml.nome p.respond_to?(:name) ? p.name : p.representante_nome
        detalhes = format_cpf(p.representante_cpf)
        cargo_funcao = p.respond_to?(:funcao) ? p.funcao : p.representante_cargo
        detalhes += " - #{cargo_funcao}" if cargo_funcao
        xml.detalhes detalhes
      end
    else
      r = @pleito.responsavel
      xml.representante do
        xml.nome r.respond_to?(:name) ? r.name : r.nome
        detalhes = format_cpf(r.cpf)
        cargo_funcao = r.respond_to?(:funcao) ? r.funcao : r.cargo
        detalhes += " - #{cargo_funcao}" if cargo_funcao
        xml.detalhes detalhes
      end
    end
  end

  def data_laudo
    data(:laudo) #TODO Remover este método e fazer as chamadas diretamente
  end

  def data(doc)
    @pleito.send("data_#{doc}") ? l(@pleito.send("data_#{doc}"), :format => :long) : "     de                  de #{Time.now.year}"
  end

  def objetivo_pleito
    descricao = @pleito.depreciacao? ? "Depreciação acelerada incentivada e desconto dos créditos da Contribuição para o PIS/PASEP e da COFINS" : @pleito.incentivo.descricao
    "Obtenção de Benefício Fiscal - #{descricao}"
  end

  def dados_laudo_oficio(xml)
    xml.data_laudo   data_laudo
    xml.laudo_nome   Parametro["laudo_nome"]
    xml.laudo_cargo  Parametro["laudo_cargo"]
    xml.numero_laudo @pleito.numero_laudo_formatado
  end

  def representante_select
    componentes = @pleito.empreendimento.componentes_empreendimento
    componentes.delete_if { |comp| comp.cpf == current_user.cpf }

    conselheiros, diretores = componentes.partition(&:conselho)
    conselheiros.delete_if { |c| diretores.any? { |d| d.cpf == c.cpf} }

    options = (conselheiros + diretores).map { |opt| ["#{truncate(opt.nome, :length => 35)}", opt.id] }
    select :pleito, :responsavel_id, options, {:include_blank => truncate(current_user.name, :length => 35)}
  end

  def razao_social(pleito = @pleito)
    pleito.empreendimento.pessoa_juridica.razao_social
  end

  def form_name(formulario)
    codes = @pleito.form_codes(formulario)
    "Formulário#{'s' if codes.length > 1} #{codes.to_sentence}"
  end

  def form_code(formulario)
    @pleito.form_codes(formulario)[0]
  end

  def tipo_projeto(pleito = @pleito)
    pleito.tipo_projeto_descricao
  end

  def tipo_projeto_completo
    complemento = {
      :reducao        => ' do empreendimento na área de atuação da SUDAM',
      :reinvestimento => ' de Equipamento',
      :isencao        => ' de empreendimento',
      :depreciacao    => ' de empreendimento' }
    tipo_projeto + complemento[@pleito.tipo]
  end

  def status_projeto(pleito = @pleito)
    "#{pleito.caracterizacao.projeto_concluido? ? 'concluiu o' : 'encontra-se em'} processo de #{tipo_projeto(pleito).downcase}"
  end

end